微信开放文档 您所在的位置:网站首页 扫码登录 流程 微信开放文档

微信开放文档

2024-07-16 14:05| 来源: 网络整理| 查看: 265

功能概述

扫码登录能力,指的是开发者可在移动应用内使用此能力,拉取二维码,用户使用微信客户端扫描二维码后可以登录此移动应用。此能力可被应用在多设备登录、智能硬件、电视盒子等场景。

iOS 扫码授权获得 Code 流程

步骤一:请求函数

(BOOL)Auth:(NSString *)appId nonceStr:(NSString *)nonceStr timeStamp:(NSString*)timeStamp scope:(NSString *) scope signature:(NSString *)signature schemeData:(NSString *)schemeData;

参数说明

参数 是否必须 说明 appid 是 应用唯一标识 scope 是 应用授权作用域,拥有多个作用域用逗号(,)分隔,APP 所拥有的 scope nonceStr 是 一个随机的尽量不重复的字符串,用来使得每次的 signature 不同 timeStamp 是 时间戳 signature 是 签名 schemeData 否 会在扫码后拼在 scheme 后

步骤二:监听二维码回调,回调的时候显示二维码

(void)onAuthGotQrcode:(UIImage *)image; //得到二维码

步骤三:用户确认登录之后回调 authCode

-(void)onAuthFinish:(int)errCode AuthCode:(NSString *)authCode; //成功登录

Android 扫码授权流程

流程

首先 APP 通过 IDiffDevOAuth.auth()接口发起授权,然后在 OAuthListener.onAuthGotQrcode()回调接口中获取二维码,在 APP 中展示二维码,最后用户通过微信扫码,授权.

接口

IDiffDevOAuth

boolean auth(String appId, String scope, String noncestr, String timestamp, String signature, OAuthListener listener)

参数说明

参数 是否必须 说明 appId 是 应用唯一标识 scope 是 应用授权作用域,拥有多个作用域用逗号(,)分隔,APP 所拥有的 scope noncestr 是 一个随机的尽量不重复的字符串,用来使得每次的 signature 不同 timestamp 是 时间戳 signature 是 签名 listener 是 授权流程的回调接口 OAuthListener /** * auth之后返回的二维码接口 * * @param qrcodeImgPath 废弃 * @param imgBuf 二维码图片数据 */ void onAuthGotQrcode(String qrcodeImgPath, byte[] imgBuf); /** * 用户扫描二维码之后,回调该接口 */ void onQrcodeScanned(); /** * 用户点击授权后,回调该接口 */ void onAuthFinish(OAuthErrCode errCode, String authCode);

SDK 扫码登录签名算法

获取 Ticket

生成签名之前必须先获取对应的 sdk_ticket。

sdk_ticket 是用于生成签名的临时票据。正常情况下,sdk_ticket 的有效期为 7200 秒,通过 access_token 来获取。由于获取 sdk_ticket 的 api 调用次数非常有限,频繁刷新 sdk_ticket 会导致 api 调用受限,影响自身业务,开发者需在自己的服务存储与更新 sdk_ticket。

1.参考以下文档,使用 APP 的 Appid 和 AppSecret 获取 access_token

2.用第一步拿到的 access_token,采用 http GET 方式请求获得 sdk_ticket:

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=2

成功返回如下 JSON:

{ "errcode": 0, "errmsg": "ok", "ticket": "-p3A5zVP95IuafPhzA6lRR95_F9nZEBfJ_n4E9t8ZFWKJTDPOwccVQhHCwDBmvLkayF_jh-m9HOExhumOziDWA", "expires_in": 7200 }

获得 sdk_ticket 之后,就可以生成扫码登录的签名了。

签名生成

签名生成规则如下:

参与签名的字段包括第三方 appid,noncestr(随机字符串), 有效的 sdk_ticket, timestamp(时间戳) 。

对所有待签名参数按照字段名(即key)的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 string1。 这里需要注意的是所有参数名均为小写字符。 对 string1 作 sha1 加密,字段名和字段值都采用原始值,不进行 URL 转义。即 signature=sha1(string1)。

示例:

appid=wxappid

sdk_ticket=-p3A5zVP95IuafPhzA6lRR95_F9nZEBfJ_n4E9t8ZFWKJTDPOwccVQhHCwDBmvLkayF_jh-m9HOExhumOziDWA

noncestr=noncestr

timestamp=1417508194

1.对所有待签名参数按照字段名(即key)的 ASCII 码从小到大排序(字典序)

appid、noncestr、sdk_ticket、timestamp

2.使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 string1:

appid=wxappid&noncestr=noncestr&sdk_ticket=-p3A5zVP95IuafPhzA6lRR95_F9nZEBfJ_n4E9t8ZFWKJTDPOwccVQhHCwDBmvLkayF_jh-m9HOExhumOziDWA×tamp=1417508194

3.对 string1 进行 sha1 签名,得到 signature: 429eaaa13fd71efbc3fd344d0a9a9126835e7303



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有